#!/usr/bin/env python3
"""
使用Docker在macOS上交叉编译Windows可执行文件
"""

import os
import sys
import subprocess
import platform

def check_docker():
    """检查Docker是否安装并运行"""
    try:
        result = subprocess.run(['docker', '--version'], capture_output=True, text=True)
        if result.returncode == 0:
            print("✓ Docker 已安装")
            return True
        else:
            print("❌ Docker 未安装或未运行")
            return False
    except FileNotFoundError:
        print("❌ Docker 未安装")
        return False

def build_windows_with_docker():
    """使用Docker构建Windows可执行文件"""
    print("开始使用Docker构建Windows可执行文件...")
    
    # 尝试多个可用的镜像
    images = [
        "cdrx/pyinstaller-windows:python3-64bit",
        "cdrx/pyinstaller-windows:python3",
        "ddemuro/pyinstaller:latest",
        "minidocks/pyinstaller:latest"
    ]
    
    for image in images:
        print(f"尝试镜像: {image}")
        try:
            # 先尝试拉取镜像
            print(f"正在拉取镜像 {image}...")
            subprocess.run(["docker", "pull", image], check=True, capture_output=True)
            
            # 使用镜像构建
            docker_cmd = [
                "docker", "run", "--rm",
                "-v", f"{os.getcwd()}:/src",
                "-w", "/src",
                image,
                "pyinstaller",
                "--onefile",
                "--windowed",
                "--name=Telegram群发软件",
                "--hidden-import=tkinter",
                "--hidden-import=tkinter.ttk",
                "--hidden-import=tkinter.messagebox",
                "--hidden-import=tkinter.filedialog",
                "--hidden-import=tkinter.scrolledtext",
                "--hidden-import=tkinter.simpledialog",
                "--hidden-import=telethon",
                "--hidden-import=asyncio",
                "--hidden-import=threading",
                "--hidden-import=queue",
                "--hidden-import=json",
                "--hidden-import=datetime",
                "--hidden-import=os",
                "--hidden-import=sys",
                "telegram_mass_sender.py"
            ]
            
            print("开始构建...")
            subprocess.run(docker_cmd, check=True)
            
            print("✓ Windows可执行文件构建成功！")
            
            # 检查生成的文件
            dist_dir = "dist"
            if os.path.exists(dist_dir):
                files = os.listdir(dist_dir)
                for file in files:
                    if file.endswith(".exe"):
                        print(f"✓ 生成文件: {os.path.join(dist_dir, file)}")
                        return True
            
            return True
            
        except subprocess.CalledProcessError as e:
            print(f"镜像 {image} 构建失败，尝试下一个...")
            continue
    
    print("❌ 所有镜像都构建失败")
    return False

def create_windows_readme():
    """创建Windows使用说明"""
    readme_content = """# Telegram 群发软件 - Windows 版本

## 使用说明

### 首次使用
1. 双击运行 `Telegram群发软件.exe` 可执行文件
2. 首次运行会弹出 API 配置窗口
3. 填写您的 Telegram API 配置信息：
   - API ID: 从 https://my.telegram.org 获取
   - API Hash: 从 https://my.telegram.org 获取
4. 点击"确定"保存配置

### 功能说明
- 连接 Telegram 账号
- 获取联系人和群组
- 批量发送消息
- 导出操作日志
- 右键菜单管理

### 注意事项
- 首次使用需要输入 API 配置
- 配置会保存在 `telegram_config.json` 文件中
- 请遵守 Telegram 使用条款，避免账号被封
- 如果被杀毒软件误报，请添加信任

### 系统要求
- Windows 10 或更高版本
- 网络连接

### 常见问题
1. 如果程序无法启动，请检查是否安装了 Visual C++ Redistributable
2. 如果被杀毒软件拦截，请添加白名单
3. 如果网络连接失败，请检查防火墙设置

### 技术支持
如有问题，请查看程序日志或联系技术支持。
"""
    
    with open("Windows使用说明.txt", "w", encoding="utf-8") as f:
        f.write(readme_content)
    
    print("✓ 已生成 Windows 使用说明文件")

if __name__ == "__main__":
    print("=" * 50)
    print("Telegram 群发软件 - Docker Windows 交叉编译")
    print("=" * 50)
    
    if not check_docker():
        print("\n请先安装Docker Desktop: https://www.docker.com/products/docker-desktop")
        sys.exit(1)
    
    if build_windows_with_docker():
        create_windows_readme()
        print("\n🎉 交叉编译完成！")
        print("Windows可执行文件位置: dist/Telegram群发软件.exe")
        print("使用说明: Windows使用说明.txt")
    else:
        print("\n❌ 交叉编译失败！")
        print("\n建议：")
        print("1. 在Windows系统上直接打包")
        print("2. 使用虚拟机运行Windows")
        print("3. 使用云服务器")
        sys.exit(1) 